package ar.edu.unrn.lia.bean;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.OptimisticLockException;

import org.primefaces.event.SelectEvent;

import ar.edu.unrn.lia.bean.datamodel.LazyUserDataModel;
import ar.edu.unrn.lia.model.User;
import ar.edu.unrn.lia.service.UserService;


@ManagedBean(name="userBean")
@ViewScoped
public class UserBean extends GenericBean<User> implements Serializable {

	private static final long serialVersionUID = 1L;	

	@ManagedProperty(value="#{userService}")
	UserService entityService;
	
	public String create() {
		setEntity(new User());
		return REDIRECT_CREATE;
	}

	public void onRowSelect(SelectEvent event) {
		agregarMensaje(FacesMessage.SEVERITY_INFO, "Usuario Seleccionado",((User) event.getObject()).getUsername());
	}

	public String update() {
		try {
			if (getEntity().getId() == null) {
				entityService.save(getEntity());				
				mensajeFlash("Crear USuario","Operación realizada con exito.");
		
			} else {
				entityService.update(getEntity());				
				mensajeFlash("Modificar USuario","Operación realizada con exito.");
			}			
			return REDIRECT_SEARCH;
		} catch (OptimisticLockException e) {
				agregarMensaje(FacesMessage.SEVERITY_ERROR, "Bloqueo",
					"Alquien modificó el Usuario, reconsulte.");
				return null;			
		} catch (Exception e) {
			agregarMensaje(FacesMessage.SEVERITY_ERROR, "Error",e.getMessage());
			return null;
		}
	}

	public String delete(User entity) {
		try {
			entityService.delete(entity);			
			mensajeFlash("Eliminar USuario","Operación realizada con exito.");
			return REDIRECT_SEARCH;
		}
			catch (OptimisticLockException e) {
				agregarMensaje(FacesMessage.SEVERITY_ERROR, "Bloqueo",
					"Alquien modificó el Usuario, reconsulte.");
				return null;			
		} catch (Exception e) {
			agregarMensaje(FacesMessage.SEVERITY_ERROR, "Error",e.getMessage());			
			return null;
		}
	}

	
	@PostConstruct
	public void init()
	{
		setModelLazy(new LazyUserDataModel(entityService));
	}


	public UserService getEntityService() {
		return entityService;
	}

	public void setEntityService(UserService entityService) {
		this.entityService = entityService;
	}
	
	public void inicio() {
		 if (!FacesContext.getCurrentInstance().isPostback()) {
			 if (getId()!= null )
				{
					setEntity(entityService.getEntityById(getId()));
				}else 
				{
					setEntity(new User());
				}			 			
		 }
	}

}